package com.zjsru.plan2023.oneday;

import java.util.HashSet;
import java.util.Set;

/**
 * @Author: CookLee
 * @Date: 2023/8/2
 * 翻转卡片游戏
 * \
 * 输入：fronts = [1,2,4,4,7], backs = [1,3,4,1,3]
 * 输出：2
 * 解释：假设我们翻转第二张卡片，那么在正面的数变成了 [1,3,4,4,7] ， 背面的数变成了 [1,2,4,1,3]。
 * 接着我们选择第二张卡片，因为现在该卡片的背面的数是 2，2 与任意卡片上正面的数都不同，所以 2 就是我们想要的数字。
 * \
 * 输入：fronts = [1], backs = [1]
 * 输出：0
 * 解释：
 * 无论如何翻转都无法得到想要的数字，所以返回 0 。
 */
public class Flipgame {
    
    /**
     * 找规律
     * 如果数组相同的数字不可能为答案，首先排除。循环遍历剩余之前排除剩下的数字，找到最小的即可
     *
     * @param fronts 方面
     * @param backs  支持
     * @return int
     */
    public int flipgame(int[] fronts, int[] backs) {
        Set<Integer> exists = new HashSet<>();
        for (int i = 0; i < fronts.length; i++) {
            if (fronts[i] == backs[i]) {
                exists.add(fronts[i]);
            }
        }
        int ans = Integer.MAX_VALUE;
        for (int num : fronts) {
            if (!exists.contains(num)) {
                ans = Math.min(num, ans);
            }
        }
        for (int num : backs) {
            if (!exists.contains(num)) {
                ans = Math.min(num, ans);
            }
        }
        //如果所有数字都相同，遍历后仍是初始值 则返回0
        return ans == Integer.MAX_VALUE ? 0 : ans;
    }
    
    public static void main(String[] args) {
        Flipgame flipgame = new Flipgame();
        int[] fronts = new int[] {1, 2, 4, 4, 7};
        int[] backs = new int[] {1, 3, 4, 1, 3};
        System.out.println(flipgame.flipgame(fronts, backs));
    }
}
